home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / rbbs_pc / rbbsasm.zip / RBBSDV.ASM < prev    next >
Assembly Source File  |  1988-02-03  |  5KB  |  116 lines

  1. PAGE 66,132
  2. TITLE RBBS-PC DESQview Interface Copyright 1986 by Jon Martin     
  3. ;--------------------------------------------------------------------;
  4. ;ROUTINE: RBBSDV              AUTHOR:  Jon Martin                    ;
  5. ;                                      4396 N. Prairie Willow Ct.    ;
  6. ;                                      Concord, California 94521     ;
  7. ;                                                                    ;
  8. ;DATE:  June 20, 1986         VERSION: 1.0                           ;       
  9. ;                                                                    ;
  10. ;FUNCTION: This routine supports calls from the IBM (MICROSOFT)      ;
  11. ;          BASIC Version 2.0 or Microsoft Quick BASIC Version 1.0    ;
  12. ;          compilers to the DESQview User Interface.  The call is:   ;
  13. ;                                                                    ;
  14. ;            CALL RBBSDV (AX%,BX%)                                   ;
  15. ;                                                                    ;
  16. ;          where AX% and BX% are 16-bit binary data items (i.e.      ;
  17. ;          integer variables) and should be set for the desired      ;
  18. ;          function as described herein.                             ;
  19. ;                                                                    ;
  20. ;          The value for AX, is defined as follows:                  ;
  21. ;                                                                    ;
  22. ;             AX% = 1     (Begin critical)  LOCK FILES               ;
  23. ;             AX% = 2     (End critical)    UNLOCK FILES             ;
  24. ;                                                                    ;
  25. ;             BX% = 0     (RBBSDV will return 0 if DESQview is not   ;
  26. ;                         active and will return version number if   ;
  27. ;                         DESQview is active)                        ;
  28. ;--------------------------------------------------------------------;
  29. RBBS_DESQ SEGMENT BYTE PUBLIC 'CODE'
  30.           ASSUME CS:RBBS_DESQ
  31.           PUBLIC RBBSDV
  32. IN_DV      DB     0
  33. TST_DV    DB     0
  34. DV_VERS   DW     0
  35. ; API_CALL is a local routine that goes on stack, does whatever call is
  36. ; passed it in BX, and then goes off stack
  37. API_CALL PROC
  38.     PUSH    AX
  39.     MOV    AX,101AH
  40.     INT    15H            ; OSTACK
  41.     MOV    AX,BX
  42.     INT    15H            ; Parameter
  43.     MOV    AX,1025H
  44.     INT    15H            ; USTACK
  45.     POP    AX
  46.     RET
  47. API_CALL ENDP
  48. GET_VERSION PROC
  49.       PUSH    BX
  50.       PUSH    CX
  51.       PUSH    DX
  52.       MOV    AX,2B01H        ; DV get version request
  53.       MOV    CX,'DE'
  54.       MOV    DX,'SQ'
  55.       INT    21H
  56.       CMP    AL,0FFH            ; Are we in DV?
  57.       JE    NO_DV            ; Jump if not
  58.       MOV    AX,BX            ; We are; put the version number in AX
  59.           MOV   DV_VERS,AX              ; Save Version ID
  60.       MOV    CS:IN_DV,1        ; Set the local IN_DV flag
  61.       JMP    SHORT DVGV_EXIT
  62. NO_DV:      SUB    AX,AX            ; Clear AX
  63.       MOV    CS:IN_DV,AL        ; And the local flag
  64. DVGV_EXIT:
  65.       POP    DX
  66.       POP    CX
  67.       POP    BX
  68.       RET
  69. GET_VERSION ENDP
  70. ; Begins a critical region.  This is a section of code which DV will not
  71. ; slice out of.  It MUST be ended with a DV_END_CRITICAL call.
  72. DV_BEGIN_CRITICAL PROC FAR
  73.     PUSH    BX
  74.     MOV    BX,101BH        ; BEGINC
  75.     CALL    API_CALL
  76.     POP    BX
  77. DVBC_END:
  78.     RET
  79. DV_BEGIN_CRITICAL ENDP
  80.  
  81. ; Ends a critical region.
  82. DV_END_CRITICAL PROC FAR
  83.     PUSH    BX
  84.     MOV    BX,101CH        ; ENDC
  85.     CALL    API_CALL
  86.     POP    BX
  87. DVEC_END:
  88.     RET
  89. DV_END_CRITICAL ENDP
  90. RBBSDV    PROC   FAR           ;LONG CALL
  91.           PUSH   BP            ;SAVE CALLERS BASE POINTER REGISTER -- BP 
  92.           MOV    BP,SP         ;SETUP TO ADDRESS OFF OF BASE POINTER REGISTER
  93.           CMP    CS:TST_DV,1   ;HAVE WE TESTED FOR DESQview?
  94.           JE     IS_IT         ;BYPASS TEST
  95.           MOV    CS:TST_DV,1   ;TEST WAS DONE ONCE
  96.           CALL   GET_VERSION   ;LET'S FIND OUT
  97. IS_IT:    CMP    CS:IN_DV,0    ;IS DESQview RUNNING?
  98.           JE     EXIT          ;NO IT IS NOT
  99.           MOV    DI,[BP]+8     ;GET ADDRESS OF AX% PARAMETER
  100.           MOV    AX,[DI]       ;PUT VALUE IN AX REGISTER
  101.           CMP    AX,1          ;TEST FOR START CRITICAL
  102.           JNE    TST_END       ;NO IT IS NOT
  103.           CALL   DV_BEGIN_CRITICAL
  104.           JMP    SET_RTN  
  105. TST_END:  CMP    AX,2          ;TEST FOR END CRITICAL
  106.           JNE    EXIT          ;MUST BE AN ERROR
  107.           CALL   DV_END_CRITICAL
  108. SET_RTN:  MOV    DI,[BP]+6     ;GET ADDRESS OF BX% PARAMETER
  109.           MOV    AX,CS:DV_VERS    ;GET STORED VERSION
  110.           MOV    [DI],AX       ;PUT DESQview VERSION IN A% PARAMETER
  111. EXIT:     POP    BP            ;RESTORE CALLERS BASE POINTER REGISTER-- BP
  112.           RET    4             ;RETURN AND REMOVE THE 2 PARAMETERS FROM STACK
  113. RBBSDV    ENDP
  114. RBBS_DESQ ENDS
  115.           END
  116.